home *** CD-ROM | disk | FTP | other *** search
/ Resource for Source: C/C++ / Resource for Source - C-C++.iso / misc_src / cslib16b / include / cspage.h < prev    next >
C/C++ Source or Header  |  1995-11-01  |  5KB  |  139 lines

  1. /***********************************************************************
  2.  
  3.                                       CSDB Library, Version 1.6.b 
  4.                                          Released: March 2nd 1995 
  5.  
  6.        Foundation class.
  7.        Supplies buffered disk IO on a page-by-page
  8.        bases.
  9.  
  10.                                            Copyright(c) 1994,1995 
  11.                                                            Combis 
  12.                                                   The Netherlands 
  13. ***********************************************************************/
  14.  
  15. #ifndef __CSPAGE_H
  16. #define __CSPAGE_H
  17.  
  18. #ifndef __CSBUFF_H
  19. #include "csbuff.h"
  20. #endif
  21.  
  22. #include "csbase.h"
  23.  
  24.  
  25. /**************************************************************************/
  26. class PAGE: public BASE, public BUFFER
  27. {
  28. protected:
  29.    U32    pc_empty;   // Page Chain Empty
  30.    U32    pn_empty;   // Number of pages empty.
  31.  
  32. protected:
  33.  
  34.    int    read_header(void);
  35.    int    write_header(void);
  36.    int    hread(void *buf,int size);
  37.    int    hwrite(void *buf,int size);
  38.    int    close2(void);
  39.    int    user_2_data(void *buf,U32 amount);
  40.    int    data_2_user(void *buf,U32 amount);
  41.    int    fseek(U32 l)          { return ::fseek(fp,l,SEEK_SET); }
  42.    void init_vars(void);
  43.    void init_defaults(void);
  44.    void init_allocs(void);
  45.    int    zap(void);
  46.    void name(CSCHAR *s)       { BUFFER::name(s); BASE::name(s); }
  47.    void emergency_exit(void);
  48.    U32    unfree_page(void);
  49.    virtual void check_id(U32 id);
  50.    virtual void set_id(void);
  51.  
  52.  
  53. public:
  54.    PAGE(void);
  55.    ~PAGE(void);
  56.  
  57. //////////////////////// Definition //////////////////////////////////////////
  58. /* Inherited
  59.    void page_size(U16 t)
  60.    U16    page_size(void)
  61.    U16    foot_size(void)
  62.    void foot_size(int size)   */
  63.  
  64.    int    define(CSCHAR *name,U16 pagesize);
  65.    int    define(CSCHAR *name)      { return define(name,lenpage); }
  66.  
  67. //////////////////////// Buffering ///////////////////////////////////////////
  68. /* INHERITED
  69.    void number_buff_min(uint nr)
  70.    void number_buff_max(uint nr)
  71.    void number_buff(uint mini,uint maxi);
  72. */
  73. //////////////////////// Open & Close ////////////////////////////////////////
  74.    int    open(CSCHAR *name,S16 kB=32);
  75.    int    close();
  76.    int    save(void);
  77.    int    save_as(CSCHAR *s);
  78.  
  79. //////////////////////// Locate & Load Pages /////////////////////////////////
  80.    CSCHAR *locate_page_d(U32 page)  { return (CSCHAR *)locate_buff_d(page); }
  81.    CSCHAR *locate_page(U32 key,int prior,int rwl) { return (CSCHAR *)locate_buff(key,prior,rwl); }
  82.    CSCHAR *load_page(U32 page)        { return (CSCHAR *)load_buff(page); }
  83.    CSCHAR *load_page_d(U32 page)    { return (CSCHAR *)load_buff_d(page); }
  84.    CSCHAR *load_page_l(U32 page)    { return (CSCHAR *)load_buff_l(page); }
  85.    CSCHAR *load_page_ld(U32 page)   { return (CSCHAR *)load_buff_ld(page); }
  86.    void *load_page(U32 key,int prior,int rwl)     { return (CSCHAR *)load_buff(key,prior,rwl);  }
  87.    void locate_double(U32 r1,CSCHAR* &p1,U32 r2,CSCHAR* &p2);
  88.    void locate_double_d(U32 r1,CSCHAR* &p1,U32 r2,CSCHAR* &p2);
  89.  
  90. //////////////////////// Read & Write Pages //////////////////////////////////
  91.    void read_page( U32 l,void *p)  { memcpy(p,load_page(l),lenpage); }
  92.    void write_page( U32 l,void *p) { memcpy(locate_page_d(l),p,lenpage); }
  93.  
  94. //////////////////////// New Pages ///////////////////////////////////////////
  95.    U32    new_page(void)            { return ((pc_empty) ? unfree_page(): add_page()); }
  96.    U32    add_page(void);
  97.    void free_page(U32 num);
  98.    U32    nr_empty(void)            { return pn_empty; }
  99.  
  100. //////////////////////// Number of Pages /////////////////////////////////////
  101. /* Inherited
  102.    U32 num_page(void) */
  103.    void set_num_page(U32 n)  { BASE::set_num_page(n); BUFFER::set_num_page(n); }
  104.  
  105. //////////////////////// Pages Status ////////////////////////////////////////
  106.    int    is_dirty_page( U32 page)    { return BUFFER::is_dirty(page); }
  107.    void set_dirty_page(void *p    )   { BUFFER::dirty(p);    }
  108.    void set_dirty_page(U32 page)    { BUFFER::dirty(page); }
  109.    void reset_dirty_page(void *p)   { BUFFER::clean(p);    }
  110.    void reset_dirty_page(U32 page)  { BUFFER::clean(page); }
  111.  
  112. /* Inherited
  113.    void change_stat(void *page,int prior,int stat);
  114.    void change_stat(void *page,int prior);
  115.    int    priority(void *page);                          */
  116.  
  117. //////////////////////// Data in Header Page /////////////////////////////////
  118.    int    data_2_header(void * ptr,U16 length);
  119.    int    header_2_data(void * ptr,U16 length);
  120.    U16    max_data_in_header(void);
  121.  
  122. //////////////////////// Report Writing //////////////////////////////////////
  123.    int    report(CSCHAR *name,int sub=1);
  124.    void report(FILE *fipo,int sub);
  125.  
  126. ////////////////////////// Miscellaneous ///////////////////////////////////////
  127. /* Inherited
  128.    U16    page_free(void)
  129.    int    background(void)
  130.    int    in_ram(U32 key);                      */
  131.    int    empty(void);
  132.    virtual int class_ID(void)  { return 11; }
  133.  
  134.  
  135. };
  136.  
  137.  
  138. #endif
  139.